package ru.lukyanets.transmission.protocol.model.torrent.arguments;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Getter;
import lombok.Setter;
import ru.lukyanets.transmission.protocol.model.torrent.Tracker;

import java.util.ArrayList;
import java.util.List;

/**
 * @author slukyanets
 */
@SuppressWarnings("unused")
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "ids",
        "bandwidthPriority",
        "downloadLimit",
        "downloadLimited",
        "files-wanted",
        "files-unwanted",
        "honorsSessionLimits",
        "location",
        "peer-limit",
        "priority-high",
        "priority-low",
        "priority-normal",
        "queuePosition",
        "seedIdleLimit",
        "seedIdleMode",
        "seedRatioLimit",
        "seedRatioMode",
        "trackerAdd",
        "trackerRemove",
        "trackerReplace",
        "uploadLimit",
        "uploadLimited"
})
@Getter
@Setter
public class TorrentSetArgs extends AbstractCommonArgs {
    @JsonProperty("ids")
    private List<Integer> ids = new ArrayList<>();

    @JsonProperty("downloadLimit")
    private long downloadLimit;

    @JsonProperty("downloadLimited")
    private boolean downloadLimited;

    @JsonProperty("honorsSessionLimits")
    private boolean honorsSessionLimits;

    @JsonProperty("location")
    private String location;

    @JsonProperty("queuePosition")
    private int queuePosition;

    @JsonProperty("seedIdleLimit")
    private int seedIdleLimit;

    @JsonProperty("seedIdleMode")
    private int seedIdleMode;

    @JsonProperty("seedRatioLimit")
    private double seedRatioLimit;

    @JsonProperty("seedRatioMode")
    private int seedRatioMode;

    @JsonProperty("trackerAdd")
    private List<String> trackerAdd;

    @JsonProperty("trackerRemove")
    private List<Integer> trackerRemove;

    @JsonProperty("trackerReplace")
    private List<Tracker> trackerReplace;

    @JsonProperty("uploadLimit")
    private long uploadLimit;

    @JsonProperty("uploadLimited")
    private boolean uploadLimited;
}
